package sess

import (
	"net"
	"os"
	"syscall"
)

// 从错误中读取最后的errno
func GetErrno(err error) int {
	if opErr, ok := err.(*net.OpError); ok {
		if sysCallErr, oks := opErr.Err.(*os.SyscallError); oks {
			if en, oko := sysCallErr.Err.(syscall.Errno); oko {
				return int(en)
			}
		}
	}
	return 0
}

// 防止太剧烈的连接的时候，需要允许这种
func IsTemporaryError(err error) bool {
	tempErr, ok := err.(interface {
		Temporary() bool
	})
	return ok && tempErr.Temporary()
}
